#include <57header.h>

/* Usage: ./02_mmap filename */
int main(int argc, char *argv[]){
    ARGS_CHECK(argc, 2);
    int fd = open(argv[1], O_RDWR);
    ERROR_CHECK(fd, -1, "open src");

    // 如果文件比较小，映射区域比较大，可以先用ftruncate分配大小
    // 然后再映射，这样避免错误
    //int ret = ftruncate(fd, 5);
    //ERROR_CHECK(ret, -1, "ftruncate");
    
    char *p =
       (char*)mmap(NULL, 5, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    ERROR_CHECK(p, MAP_FAILED, "mmap");

    // p指针指向的区域就是一个纯粹用户区域内存块
    for(int i = 0; i < 5; i++){
        printf("%c\n", p[i]);
    }
    p[3] = 'a';
    // 映射区域用完了，要及时释放资源
    munmap(p, 5);
    close(fd);
    return 0;
}

